import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'connect.dart';
import 'smart_light_controller.dart';
import 'weight_controller.dart';
import 'device_name.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,//是否显示右上角的demo图标
      title: '全创生活',
      initialRoute:"home", //名为"home"的路由作为应用的home(首页)
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,//使视觉密度适应您运行的平台
      ),
      //注册路由表
      routes:{
        "connect_page":(context) => ConnectPage(deviceName: ModalRoute.of(context).settings.arguments),//连接页面
        "weight_controller":(context) => WeightControllerPage(),//体重秤操作页面
        "smart_light_controller":(context) => SmartLightControllerPage(),//冷暖灯操作页面
        "home":(context) => MyHomePage(title: '全创生活')//主页面
      },
      //home: MyHomePage(title: '全创生活')
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key key, this.title}) : super(key: key);
  final String title;

  @override
  State<StatefulWidget> createState()=> _MainPageState();

}

class _MainPageState extends State<MyHomePage> {
  static const platform = const MethodChannel('my.flutter.io/bluetooth');//定义与底层操作系统的方法调用通道

  //widget初始化之后调用
  void afterBuildCallback(BuildContext context){
    print('进入了afterBuildCallback');
    if(defaultTargetPlatform==TargetPlatform.android)//如果是安卓设备要自己主动去申请,苹果则是自动去申请
      platform.invokeMethod('applyBlueAuth').then((value) => print(value));//调用底层去申请手机权限
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
          centerTitle: true, // 标题居中
          title: Text(widget.title)
      ),
      body: Column(//Column和Row容器无法设置宽度和高度,会占用尽可能大的空间，而FractionallySizedBox要求父组件有宽度和高度，所以不能将FractionallySizedBox直接作为子组件
        children: [
          Expanded(//对column进行分块，指定它们的flex属性, Flutter将自动设置它们的宽/高
              flex: 5,
              child:FractionallySizedBox(//FractionallySizedBox 是一个相对父组件尺寸的组件
                  widthFactor: 1,
                  heightFactor: 1,
                  child:GestureDetector(
                    onTap: (){//点击事件
                      print('冷暖灯被点击了');
                      Navigator.pushNamed(context, "connect_page",arguments: DeviceName.LIGHT_DEVICE_NAME);
                    },
                    child: Image.asset("images/light.jpg",fit: BoxFit.fill),//在image组件里面直接设置fit: BoxFit.fill等是怎没有用的，一定要设置image组件的宽度和高度，不然的话image控件大小依赖图片大小，fit属性指的是图片要怎么填充image组件,
                  )
              )
          ),
          Expanded(//对column进行分块，指定它们的flex属性, Flutter将自动设置它们的宽/高
              flex: 5,
              child:FractionallySizedBox(//FractionallySizedBox 是一个相对父组件尺寸的组件
                  widthFactor: 1,
                  heightFactor: 1,
                  child:GestureDetector(
                    onTap: (){//点击事件
                      print('体重秤被点击了');
                      Navigator.pushNamed(context, "connect_page",arguments: DeviceName.WEIGHT_DEVICE_NAME);
                    },
                    child:Image.asset("images/weight.jpg",fit: BoxFit.fill),//在image组件里面直接设置fit: BoxFit.fill等是怎没有用的，一定要设置image组件的宽度和高度，不然的话image控件大小依赖图片大小，fit属性指的是图片要怎么填充image组件
                  )
              )
          )
        ],
      ),
    );
  }

  @override
  void initState() {//当Widget第一次插入到Widget树时会被调用,并且只会调用一次
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((_) => afterBuildCallback(context));//注册一个回调函数在widget初始化完成之后调用
  }
}


